#pragma once

#include "G4UImessenger.hh"
//#include "globals.hh"

//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....

class PrimaryGeneratorAction;
class G4UIdirectory;
class G4UIcmdWithAString;
class G4UIcmdWithADoubleAndUnit;
class G4UIcmdWithADouble;

class PrimaryGeneratorMessenger : public G4UImessenger
{
public:
    PrimaryGeneratorMessenger(PrimaryGeneratorAction*);
    virtual ~PrimaryGeneratorMessenger();

    void SetNewValue(G4UIcommand* command, G4String newValue);

private:
    PrimaryGeneratorMessenger& operator=(const PrimaryGeneratorMessenger& right);
    PrimaryGeneratorMessenger(const PrimaryGeneratorMessenger&);

    PrimaryGeneratorAction* _fGen;
    G4bool _fVerbose;

    G4UIdirectory* _fGunDir;

    G4UIcmdWithADoubleAndUnit* fBeamXCmd;
    G4UIcmdWithADoubleAndUnit* fBeamYCmd;
    G4UIcmdWithADoubleAndUnit* fBeamZCmd;
    G4UIcmdWithADoubleAndUnit* fBeamECmd;
    G4UIcmdWithADoubleAndUnit* fSigmaXCmd;
    G4UIcmdWithADoubleAndUnit* fSigmaYCmd;
    G4UIcmdWithADoubleAndUnit* fSigmaZCmd;
    G4UIcmdWithADouble* fSigmaECmd;

    G4UIcmdWithAString* fDisTypeXYCmd;
    G4UIcmdWithAString* fDisTypeECmd;

    G4UIcmdWithADoubleAndUnit* fThetaCmd;
    G4UIcmdWithAString* fDisTypeThetaCmd;
    G4UIcmdWithADoubleAndUnit* fSpotDeltaYCmd;
};
